/* ************************************************************************

   Copyright:
     2008 openWorks

   License:
     LGPL: http://www.gnu.org/licenses/lgpl.html
     See the LICENSE file in the project's top-level directory for details.

   Authors:
     * Martín Alejandro Paz

************************************************************************ */

/**
* Objeto creado con un {@link qx.ui.basic.Label} y uno o varios {@link  qx.ui.form.CheckBox}.
* 
* *Ejemplo:*
*
* <pre class='javascript'>
*  var datosEstructura = 
*  [
*   {value: '1' , label: 'nombre del item1'},  
*   {label: 'nombre del item 2', value: '2'},
*   {label: 'nombre del item 4'},
*   {value: '5'}
*  ]
*  var cmbCombo = new qx.ui.form.ow.Checks("Label:",datosEstructura);
*  </pre>
*/

qx.Class.define("qx.ui.form.ow.Checks",
{
	extend : qx.ui.container.Composite,
	/**
	* @param label {String} Titulo que acompaña a los Checkboxs.
	* @param  structure {Map} Array de datos que se pasan al Constructor.<br />
	* *Parametros:*
	* <ul>
	* <li>*label:* Texto a mostrar en el item.</li>
	* <li>*value:* Valor del item.</li>
	* </ul>
	* _Aclaracion:_ Al menos debe existir _label_ o _value_, el cual cumplira la funcion de ambos.
	* @param hAlign {Boolean ? false} _true_ si se quiere distribuir los CheckBoxs horizontalmente.
	*/
	construct : function (label, structure, hAlign)
	{
		this.base(arguments);

		if (hAlign)
		{
			this.setLayout(new qx.ui.layout.HBox(5));
		}
		else
		{
			this.setLayout(new qx.ui.layout.VBox(5));
		}

		this._label = new qx.ui.basic.Label(label);
		this._label.setWidth(120);
		this._label.setRich(true);

		this._checks = [];

		for (r in structure)
		{
			if (structure[r].value != null)
			{
				if (structure[r].label != null)
				{
					this._checks.push((new qx.ui.form.CheckBox(structure[r].label)).set({value:structure[r].value}));
				}
				else
				{
					this._checks.push((new qx.ui.form.CheckBox(structure[r].value)).set({value:structure[r].value}));
				}
			}
			else
			{
				if (structure[r].label != null)
				{
					this._checks.push((new qx.ui.form.CheckBox(structure[r].label)).set({value:structure[r].label}));
				}
			}
		}

		this.add(this._label);

		for (r in this._checks)
		{
			this.add(this._checks[r]);
		}
	},
	
/*
*****************************************************************************
     MEMBERS
*****************************************************************************
*/
  
	members :
	{
		_label : null,
		_checks : null,

		/**
		* Devuelve el objeto *qx.ui.basic.Label*.
		* @return {qx.ui.basic.Label}
		*/
		getLabel : function () { return this._label; },
		
		/**
		* Devuelve el objeto *qx.ui.form.CheckBox* segun el indice.
		* @param index {Integer} Indice del vector de CheckBoxs. 
		* @return {qx.ui.form.CheckBox}
		*/
		getCheck : function (index) { return this._checks(index) },
		
		/**
		* Devuelve el objeto *Array* con los CheckBoxs del objeto.
		* @return {qx.ui.form.CheckBox[]}
		*/
		getChecks : function () { return this._checks; },
		
		/**
		* Devuelve un *Array* con los valores de los CheckBoxs seleccionados.
		* @return {String[]}
		*/
		getValues : function ()
		{
			var values = [];
			for (r in this._checks)
			{
				if (this._checks[r].isChecked())
				{
					values.push(this._checks[r].getValue());
				}
			}
			return values;
		},
		/**
		* Devuelve un *Array* con los textos mostrados de los CheckBoxs seleccionados.
		* @return {String[]}
		*/
		getValuesDisplay : function ()
		{
			var values = [];
			for (r in this._checks)
			{
				if (this._checks[r].isChecked())
				{
					values.push(this._checks[r].getLabel());
				}
			}
			return values;
		},
		/**
		* Selecciona los CheckBoxs que se encuentre su valor dentro del array.
		* @param array {String[]} Vector de valores de los CheckBoxs a seleccionar.
		* @return {void}
		*/
		setValues : function (array)
		{
			/*
			for (i in array)
			{
				for (r in this._checks)
				{
					if (this._checks[r].getValue() == array[i])
					{
						this._checks[r].setChecked(true);
					}
					else
					{
						this._checks[r].setChecked(false);
					}
				}
			}
			*/
			var j = 0;
			for (i in this._checks)
			{
				if (array[j] != undefined)
				{
					if (this._checks[i].getValue() == array[j])
					{
						this._checks[i].setChecked(true);
					}
					else
					{
						this._checks[i].setChecked(false);
					}
				}
				else
				{
					
					this._checks[i].setChecked(false);
				}
				j++;
			}
		},
		focus : function ()
		{
			this._checks[0].focus();
		}
	}
});